package com.ljc.interfaces;

import com.ljc.entity.*;

import java.util.List;
import java.util.Map;

public interface VideoApi {
    /**
     * 视频投稿
     */
    Video addVideos(Video video);

    /**
     * 对视频批量添加标签
     */
    void batchAddVideoTags(List<VideoTag> videoTagList);

    /**
     * 获得视频的分页数
     */
    Integer pageCountVideos(Map<String, Object> params);

    /**
     * 查询视频信息
     */
    List<Video> pageListVideos(Map<String, Object> params);

    /**
     * 根据视频id查询视频
     */
    Video getVideoById(Long videoId);

    /**
     * 查询当前视频是否被当前用户点赞过
     */
    VideoLike getVideoLikeByVideoIdAndUserId(Long videoId, Long userId);

    /**
     * 新增一条点赞记录
     */
    void addVideoLike(VideoLike videoLike);

    /**
     * 取消点赞视频
     */
    void deleteVideoLike(Long videoId, Long userId);

    /**
     * 查询视频点赞数量
     */
    Long getVideoLikes(Long videoId);

    /**
     * 删除原有视频收藏
     */
    void deleteVideoCollection(Long videoId, Long userId);

    /**
     * 添加新的视频收藏
     */
    void addVideoCollection(VideoCollection videoCollection);

    /**
     * 查询视频收藏数量
     */
    Long getVideoCollections(Long videoId);

    /**
     * 根据视频id和用户id查询用户是否点赞过该视频
     */
    VideoCollection getVideoCollectionByVideoIdAndUserId(Long videoId, Long userId);

    /**
     * 根据视频id和用户id查询该用户对该视频的投币数
     */
    VideoCoin getVideoCoinByVideoIdAndUserId(Long videoId, Long userId);

    /**
     * 新增视频投币
     */
    void addVideoCoin(VideoCoin videoCoin);

    /**
     * 更新视频投币
     */
    void updateVideoCoin(VideoCoin videoCoin);

    /**
     * 获取视频投币数
     */
    Long getVideoCoinsAmount(Long videoId);

    /**
     * 添加视频评论
     */
    void addVideoComment(VideoComment videoComment);

    /**
     * 查询视频评论的分页数量
     */
    Integer pageCountVideoComments(Map<String, Object> params);

    /**
     * 分页查询一级视频的评论
     */
    List<VideoComment> pageListVideoComments(Map<String, Object> params);

    /**
     * 根据根评论批量查询视频二级评论
     */
    List<VideoComment> batchGetVideoCommentsByRootIds(List<Long> parentIdList);

    /**
     * 根据视频id获取视频详情
     */
    Video getVideoDetails(Long videoId);

    /**
     * 获取视频访问记录
     */
    VideoView getVideoView(Map<String, Object> params);

    /**
     * 添加观看记录
     */
    void addVideoView(VideoView videoView);

    /**
     * 查询视频播放量
     */
    Integer getVideoViewCounts(Long videoId);

    /**
     * 获取所有用户偏好
     */
    List<UserPreference> getAllUserPreference();

    /**
     * 根据视频id列表批量查询视频
     */
    List<Video> batchGetVideosByIds(List<Long> itemIds);

    /**
     * 通过视频id获取视频标签
     */
    List<VideoTag> getVideoTagsByVideoId(Long videoId);

    /**
     * 批量删除视频标签
     */
    void deleteVideoTags(List<Long> tagIdList, Long videoId);
}
